package com.jy.utils;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;

/**
 * 文件页面展示工具类
 */
public class JavaComBrideUtil {

    /**
     *
     * @Title: ppt2PDF
     * @Description: 转换ppt为office
     * @param @param inputFile
     * @param @param pdfFile
     * @param @return    设定文件
     * @return boolean    返回类型
     * @throws
     */
    public static boolean ppt2PDF(String inputFile,String pdfFile){
        try{
            System.out.println("PowerPoint.Application............");
            ActiveXComponent app = new ActiveXComponent("PowerPoint.Application");
            //app.setProperty("Visible", msofalse);
            Dispatch ppts = app.getProperty("Presentations").toDispatch();
            Dispatch ppt = Dispatch.call(ppts,
                    "Open",
                    inputFile,
                    true,//ReadOnly
                    true,//Untitled指定文件是否有标题
                    false//WithWindow指定文件是否可见
            ).toDispatch();

            Dispatch.call(ppt,
                    "SaveAs",
                    pdfFile,
                    //ppSaveAsPDF
                    new Object[]{pdfFile, 17}
            );
            Dispatch.call(ppt, "Close");
            app.invoke("Quit");
            return true;
        }catch(Exception e){
            return false;
        }
    }

    /**
     *
     * @Title: word2PDF
     * @Description: 转换word文档为pdf
     * @param @param inputFile
     * @param @param pdfFile
     * @param @return    设定文件
     * @return boolean    返回类型
     * @throws
     */
    public static boolean word2PDF(String inputFile,String pdfFile){
        try{
            //打开word应用程序
            ActiveXComponent app = new ActiveXComponent("Word.Application");
            //设置word不可见
            app.setProperty("Visible", false);
            //获得word中所有打开的文档,返回Documents对象
            Dispatch docs = app.getProperty("Documents").toDispatch();
            //调用Documents对象中Open方法打开文档，并返回打开的文档对象Document
            Dispatch doc = Dispatch.call(docs,
                    "Open",
                    inputFile,
                    false,
                    true
            ).toDispatch();
            //调用Document对象的SaveAs方法，将文档保存为pdf格式
        /*
        Dispatch.call(doc,
                    "SaveAs",
                    pdfFile,
                    wdFormatPDF     //word保存为pdf格式宏，值为17
                    );
                    */
            Dispatch.call(doc,
                    "ExportAsFixedFormat",
                    pdfFile,
                    //wdFormatPDF     //word保存为pdf格式宏，值为17
                    new Object[]{pdfFile, 17}
            );
            //关闭文档
            Dispatch.call(doc, "Close",false);
            //关闭word应用程序
            app.invoke("Quit", 0);
            return true;
        }catch(Exception e){
            return false;
        }
    }

    /**
     *
     * @Title: excel2PDF
     * @Description: 转换excel为PDF
     * @param @param inputFile
     * @param @param pdfFile
     * @param @return    设定文件
     * @return boolean    返回类型
     * @throws
     */
    public static boolean excel2PDF(String inputFile,String pdfFile){
        try{
            ActiveXComponent app = new ActiveXComponent("Excel.Application");
            app.setProperty("Visible", false);
            Dispatch excels = app.getProperty("Workbooks").toDispatch();
            Dispatch excel = Dispatch.call(excels,
                    "Open",
                    inputFile,
                    false,
                    true
            ).toDispatch();
            Dispatch.call(excel,
                    "ExportAsFixedFormat",
                    //xlTypePDF,
                    new Object[]{pdfFile, 17},
                    pdfFile
            );
            Dispatch.call(excel, "Close",false);
            app.invoke("Quit");
            return true;
        }catch(Exception e){
            return false;
        }
    }
}
